﻿<p><code>/etc/shadow</code>档案结构如下：
    <pre><code>[root@centos-chuan ~]# cat /etc/shadow | head
root:$6$u3BdkeixNDUhdeAO$tsRjYhLblmaZ0vFpBuwL2HDndaw2vk2A.1gQPG9Pg.t38l/nxc03Rt8vWT17CLvWk46Nm04BX6ajLds.QBx3V0:16812:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
uucp:*:15980:0:99999:7:::</code></pre>
</p>
<p>从此档案的内容可以看到，和<code>/etc/passwd</code>一样，同样使用<code>:</code>分隔，每行被分为9个字段，各个字段的含义如下所述：</p>
<ol>
    <li><strong>用户名：</strong><br />
        跟/etc/passwd对应。
    </li>
    <li><strong>密码：</strong><br />
        用户密码，这个才是该账号的真正的密码，不过这个密码已经加密过了，但是有些黑客还是能够解密的。所以为了安全，该文件属性设置为600，只允许<code>root</code>读写。
    </li>
    <li><strong>最近更动密码的日期</strong><br />
        这个数字是这样计算得来的，距离1970年1月1日到上次更改密码的日期，例如上次更改密码的日期为2012年1月1日，则这个值就是365*（2012-1970）+1=15331。
        也可以使用<pre><code>[root@centos-chuan ~]# echo $(($(date --date="2016/01/14" +%s)/86400+1))
16814</code></pre>
    </li>
    <li><strong>多少天才可以更改密码：(与第 3 字段相比)</strong><br />
        第四个字段记录了：这个账号的密码在最近一次被更改后需要经过几天才可以再被变更！如果是
        0 的话， 表示密码随时可以更动的意思。
    </li>
    <li><strong>密码多少天后过期：(与第 3 字段相比) </strong><br />
        即在多少天内必须更改密码，例如这里设置成30，则30天内必须更改一次密码，否则将不能登录系统，默认是99999，可以理解为永远不需要改。
    </li>
    <li><strong>密码需要变更期限前的警告天数：(与第 5 字段相比) </strong><br />
        密码到期前的警告期限，若这个值设置成7，则表示当7天后密码过期时，系统就发出警告告诉用户，提醒用户他的密码将在7天后到期。
    </li>
    <li><strong>密码过期后的账号宽限时间(密码失效日)：(与第 5 字段相比) ：</strong><br />
        密码有效日期为『更新日期(第3字段)』+『重新变更日期(第5字段)』，过了该期限后用户依旧
        没有更新密码，那该密码就算过期了。 虽然密码过期但是该账号还是可以用来进行其他工作的，
        包括登入系统取得 bash 。不过如果密码过期了， 那当你登入系统时，系统会强制要求你必须要
        重新设定密码才能登入继续使用，这就是密码的过期性。<br />

        那这个字段的功能是什么呢？是在密码过期几天后，如果使用者如果还没有登录更改密码，那么这
        个账号的密码将会『失效』， 亦即该账号再也无法使用该密码登录了。
        <p>
            要注意密码过期与密码失效并不相同。
        </p>
        账号失效期限。你可以这样理解，如果设置这个值为3，则表示：密码已经到期，然而用户并没有在到期前修改密码，那么再过3天，则这个账号就失效了，即锁定了。
    </li>
    <li>
        <strong>账号的生命周期，</strong><br />
        跟第三段一样，是按距离1970年1月1日多少天算的。它表示的含义是，账号在这个日期前可以使用，到期后账号作废。
    </li>
    <li>
        <strong>保留</strong><br />
        最后一个字段是保留的，看以后有没有新功能加入。
    </li>
</ol>

<p>某些情况底下你得要使用一些方法来更改这个档案，举例来说，『我的密
    码忘记了』， 或者是『我的密码不晓得被谁改过，跟原先的不一样了』，这个时候怎么办？ 
    <ul>
        <li>一般用户的密码忘记了：<br />这个最容易解决，请系统管理员帮忙， 他会重新设定好你的密码而不需
            要知道你的旧密码！利用 <code>root</code> 的身份使用 <code>passwd</code> 指令来处理即可。
        </li>
        <li>root 密码忘记了：<br />这就麻烦了，<br />
        重新启动进入单人维护模式后，系统会主动的给予 <code>root</code> 权限的 <code>bash</code> 接口， 此时再以
            <code>passwd</code> 修改密码即可；<br />
        或以 Live CD 开机后挂载根目录去修改 <code>/etc/shadow</code>，将里面的 <code>root</code>
的密码字段清空， 再重新启动后 <code>root</code> 将不用  <code>passwd</code> 指令去设
定 <code>root</code> 密码即可。</li>
    </ul>
</p>

